package com.yunpeng.aidevice.biz.service;

import com.alibaba.fastjson.JSONArray;
import com.yunpeng.aidevice.common.vo.AppUpdateInfoVO;
import com.yunpeng.common.dto.Result;
import com.yunpeng.aidevice.common.dto.query.MerchantListQueryDTO;
import com.yunpeng.aidevice.common.dto.save.MerchantSaveDTO;
import com.yunpeng.common.paging.PagingQueryDTO;
import com.yunpeng.aidevice.common.vo.SimpleEntityVO;
import com.yunpeng.aidevice.common.vo.merchant.MerchantDetailVO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * IMerchantBizService
 *
 * @author : Moore(hemw)
 * @date : 2020-04-28
 */
public interface IMerchantBizService {
    /**
     * 商户列表
     *
     * @param merchantListQueryDTO
     * @return
     */
    Result<PagingQueryDTO> queryMerchantList(MerchantListQueryDTO merchantListQueryDTO);

    /**
     * 商户详情
     *
     * @param merchantCode
     * @param tenantCode
     * @return
     */
    Result<MerchantDetailVO> merchantDetail(String merchantCode, String tenantCode);

    /**
     * 新增商户
     *
     * @param merchantSaveDTO
     * @param operatorCode
     * @return
     */
    Result<Void> addNewMerchant(MerchantSaveDTO merchantSaveDTO, String operatorCode);

    /**
     * 更新商户失效时间
     *
     * @param merchantCode
     * @param tenantCode
     * @param updateTime
     * @param operatorCode
     * @return
     */
    Result<Void> invalidDateUpdate(String merchantCode, String tenantCode, LocalDateTime updateTime, String operatorCode);

    /**
     * 更新商户信息
     *
     * @param merchantSaveDTO
     * @param operatorCode
     * @return
     */
    Result<Void> updateMerchant(MerchantSaveDTO merchantSaveDTO, String operatorCode);

    /**
     * 获取商户下拉数据
     *
     * @param tenantCod
     * @return
     */
    Result<List<SimpleEntityVO>> dropDownList(String tenantCod);

    /**
     * 商户固定（用户、设备）统计
     *
     * @param merchantCodes
     * @param tenantCode
     * @return
     */
    Result<JSONArray> getMerchantCountValue(List<String> merchantCodes, String tenantCode);

    /**
         * 禁用启用商户
         *
         * @param disable
         * @param merchantCode
         * @param tenantCode
         * @param operatorCode
         * @return
         */
    Result<Void> enableDisableMerchant(Boolean disable, String merchantCode, String tenantCode, String operatorCode);

    /**
     * 获取商户设备更新配置
     *
     * @param merchantCode
     * @param tenantCode
     * @return
     */
    Result<AppUpdateInfoVO> getMerchantAppUpdateInfo(String merchantCode, String tenantCode);

    /**
     * 设置app更新时间
     *
     * @param startTime
     * @param endTime
     * @param merchantCode
     * @param tenantCode
     * @param operatorCode
     * @return
     */
    Result<Void> updateAppUpdateTime(Short startTime, Short endTime, String merchantCode, String tenantCode, String operatorCode);
}
